package ooap;

import sun.misc.JavaNetAccess;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2022/9/5 21:17
 *   static 关键字 ：
 *       无论static修饰的是啥，看见static，和对象无关，属于类固有的作用域
 *          既有属性也有方法
 *       1.static修饰类中的属性,称之为类的静态属性/类属性！存储在JVM方法区
 *          类中所有常量和静态变量放在方法区，共享同一个方法区
 *          直接使用类名称访问静态变量和常量
 *          在方法中不可以定义静态变量
 *       2.static修饰类中的方案,称之为类方法，和对象无关，只能直接使用类中的静态方法和静态属性
 *       3.不能直接作用于外部类，可以修饰内部类
 *
 */
public  class Japanese {
    //static 修饰内部类
    public static class Test{

    }
    static int n =10 ;
    public String name;
    public int age;
    public static String country;
    public static void test(){
        System.out.println("静态方法");
    };

    public Japanese(String name, int age, String country) {
        this.name = name;
        this.age = age;
        this.country = country;
    }
    public void show(){

        System.out.println("姓名："+name+"，年龄："+age+"，国籍："+country);
    }

    public static void main(String[] args) {
        Japanese j1 = new Japanese("1",90,"JP");
        //j1.country="CH";
        Japanese j2 = new Japanese("2",80,"JP");
        //j2.country="CH";
        Japanese j3 = new Japanese("3",70,"JP");
        //j3.country="CH";
        //通过对象访问静态变量
        j1.country="CH";
        //通过类访问静态变量
        Japanese.country = "CH";
        j1.show();
        j2.show();
        j3.show();
        //静态方法访问静态属性
        System.out.println(country);
        //静态方法 直接访问静态方法
        test();
        //静态方法 不能直接访问成员方法
        //show;
        TestT.showT();
        //java: 无法从静态上下文中引用非静态 变量 this(对象)
        //this表示当前对象
        //System.out.println(this.country);
        //调用的时候直接去方法区
        Japanese j = null;
        System.out.println(j.n);
    }
}

class TestT {
    public static void showT() {
        System.out.println("another class static method");
    }
}
